package cn.cjxy.web.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 生命周期
 *
 * 执行过程：
 *          1. 浏览器发送请求，tomcat接收到请求的地址。通过请求地址找到访问哪个项目，通过最后/hello，找项目中所有的Servlet
 *          2. 通过反射读取每个Servlet中的注解值，匹配到/hello，找到了需要访问的servlet。
 *          3. 通过反射实例化这个Servlet对象
 *          4. 创建request和response对象
 *          5. 并且调用service方法，将request和response对象传递进来。
 *          6. 执行servlet中的代码
 *          7. 将响应的信息封装成response对象返回到浏览器，在浏览器上显示出来。
 * @author huangjie
 * @date 2025/9/26
 */
@WebServlet("/life")
public class ServletLifeCycle_methods  extends HttpServlet {
    //构造方法
    public ServletLifeCycle_methods(){
        System.out.println("servlet is created------");
    }

    //初始化方法
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("servlet is inited------");
    }

    /**
     * 方法	        作用	                运行次数
     * 构造方法	在对象实例化的时候执行	        1次
     * void init(ServletConfig config)	在初始化的时候执行	1次
     * void service(ServletRequest req, ServletResponse res)	每次请求都会执行	n次
     * void destroy()	在服务器关闭的时候	1次
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应编码
        resp.setContentType("text/html;charset=utf-8");
        //往网页输出信息
        //获取打印流对象
        resp.getWriter().print("<h1>servlet的生命周期</h1>");
        System.out.println("servlet is servicing------");
    }
    //销毁方法   在服务器关闭的时候	1次
    @Override
    public void destroy() {
        System.out.println("servlet is destroyed------");
    }
}
